package com.yun.datastructure.linear.list.arraylist.leetcode;


/**
 * 27. 移除元素
 * 给你一个数组 nums 和一个值 val，你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。
 *
 * 假设 nums 中不等于 val 的元素数量为 k，要通过此题，您需要执行以下操作：
 *
 * 更改 nums 数组，使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
 * 返回 k。
 */
public class Leetcode27 {
    public static void main(String[] args) {
        int[] nums = {0, 1, 2, 2, 3, 0, 4, 2};
        Leetcode27 test = new Leetcode27();
        test.removeElement(nums, 2);
        test.removeElement(new int[]{}, 3);
    }

    public int removeElement(int[] nums, int val) {
        int p = 0, q = nums.length - 1;
        while (p <= q) {
            if (nums[p] == val) {
                swap(nums, p, q);
                q--;
            } else {
                p++;
            }
        }
        return p;
    }

    private void swap(int[] nums, int i, int j) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }


}
